//package com.example;
//
//import java.io.IOException;
//import java.util.Iterator;
//import java.util.Map.Entry;
//import java.util.Properties;
//
//import org.springframework.boot.env.PropertySourceLoader;
//import org.springframework.core.Ordered;
//import org.springframework.core.env.PropertiesPropertySource;
//import org.springframework.core.env.PropertySource;
//import org.springframework.core.io.Resource;
//import org.springframework.core.io.support.PropertiesLoaderUtils;
//
//import com.cmsz.framework.util.Base64Util;
//
///**
// * 对进行了base64编码的配置项进行解码
// * @author Eshin
// *
// */
//public class MyBase64PropertiesPropertySourceLoader implements PropertySourceLoader,Ordered{
//	
//	private final static String PREFIX = "ENC(";
//	private final static String SUFFIX = ")";
//	@Override
//	public String[] getFileExtensions() {
//		return new String[] { "properties", "xml" ,"conf"};
//	}
//
//	@Override
//	public PropertySource<?> load(String name, Resource resource, String profile)
//			throws IOException {
//		if (profile == null) {
//			Properties properties = PropertiesLoaderUtils.loadProperties(resource);
//			Properties newProperties = new Properties();
//			
//			for(Entry<Object, Object> entry:properties.entrySet()){
//				String originalValue = (String) entry.getValue();
//				String oriKey = (String) entry.getKey();
//				if(originalValue.startsWith(PREFIX) && originalValue.endsWith(SUFFIX)){
//					StringBuilder sb = new StringBuilder(originalValue);
//					byte[] decode = Base64Util.decode(sb.substring(4, sb.length()-1));
//					if(decode == null){
//						throw new IllegalArgumentException(String.format("%s 不能被解密", originalValue));
//					}
//					originalValue =  new String(decode);
//					
//				}
//				newProperties.setProperty(oriKey, originalValue);
//			}
//			if (!newProperties.isEmpty()) {
//				return new PropertiesPropertySource(name, newProperties);
//			}
//		}
//		return null;
//	}
//
//	/**
//	 * 保证在多个loader匹配相同的getFileExtensions()时，最优先使用
//	 */
//	@Override
//	public int getOrder() {
//		return HIGHEST_PRECEDENCE;
//	}
//}
